Amazon EBSをRAID0構成にしてディスクI/O性能を上げる
RAID0とは
RAID0は、複数のディスクを1台のディスクのように扱い読み書きを高速化します。ストライピングと呼びます。Amazon EBSは、既に高い耐障害性を持っていますので、これをRAID0構成にすることで、Amazon EC2インスタンスの性能を引き出そうというのが今回の実験です。
下準備
RAID構成を組むためにセットアップします。
$ sudo yum update -y $ sudo yum install mdadm xfsprogs -y $ sudo yum install bonnie++ --enablerepo=epel -y
RAID0構成の組み方
RAID0構成を組むための基本操作をご紹介します。下記の例はRAID0で2台構成で2つのドライブを指定しています。
$ sudo mdadm --create --verbose /dev/md0 --level=0 -c256 --raid-devices=2 /dev/sdf /dev/sdg $ sudo blockdev --setra 65536 /dev/md0 $ sudo mkfs.xfs /dev/md0 -f $ echo DEVICE /dev/sdf /dev/sdg | sudo tee /etc/mdadm.conf DEVICE /dev/sdf /dev/sdg $ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm.conf ARRAY /dev/md0 metadata=1.2 name=ip-10-156-99-253:0 UUID=650b41fe:9261e9c8:da982ef0:74f04579 $ sudo mkdir -p /mnt/md0 && sudo mount -o noatime /dev/md0 /mnt/md0
実際にI/O性能を計測するためにbonnie++を用います。
$ sudo bonnie++ -d /mnt/md0/ -u root -q | sudo bon_csv2html > output.html
4台構成の場合は以下のように変更してください。
$ sudo mdadm --create --verbose /dev/md0 --level=0 -c256 --raid-devices=4 /dev/sdf /dev/sdg /dev/sdh /dev/sdi
実際にRAID構成を確認するために以下コマンドを実行します。
$ sudo mdadm /dev/md0 /dev/md0: 15.100GiB raid0 4 devices, 0 spares. Use mdadm --detail for more detail.
Microインスタンス(EBS)RAID0 2台構成 - 64bit
以下は平均値です。
- ブロック書き込み:34970 kB/Sec
- ブロックリライト:27271 kB/Sec
- ブロック読み込み:162178 kB/Sec
- ランダムシーク :4549 /Sec
Largeインスタンス(EBS)RAID0 2台構成 - 64bit
以下は平均値です。
- ブロック書き込み:78498 kB/Sec
- ブロックリライト:75381 kB/Sec
- ブロック読み込み:1123610 kB/Sec
- ランダムシーク :10670 /Sec
Extra Largeインスタンス(EBS)RAID0 2台構成 - 64bit
以下は平均値です。
- ブロック書き込み:81722 kB/Sec
- ブロックリライト:86559 kB/Sec
- ブロック読み込み:1573818 kB/Sec
- ランダムシーク :12684 /Sec
High-Memory Extra Largeインスタンス(EBS)RAID0 2台構成 - 64bit
以下は平均値です。
- ブロック書き込み:70917 kB/Sec
- ブロックリライト:71262 kB/Sec
- ブロック読み込み:1961041 kB/Sec
- ランダムシーク :13252 /Sec
Microインスタンス(EBS)RAID0 4台構成 - 64bit
以下は平均値です。
- ブロック書き込み:36763 kB/Sec
- ブロックリライト:26447 kB/Sec
- ブロック読み込み:173878 kB/Sec
- ランダムシーク :4507 /Sec
Largeインスタンス(EBS)RAID0 4台構成 - 64bit
以下は平均値です。
- ブロック書き込み:86972 kB/Sec
- ブロックリライト:80442 kB/Sec
- ブロック読み込み:1135758 kB/Sec
- ランダムシーク :11368 /Sec
Extra Largeインスタンス(EBS)RAID0 4台構成 - 64bit
以下は平均値です。
- ブロック書き込み:113565 kB/Sec
- ブロックリライト:107232 kB/Sec
- ブロック読み込み:1551414 kB/Sec
- ランダムシーク :14466 /Sec
High-Memory Extra Largeインスタンス(EBS)RAID0 4台構成 - 64bit
以下は平均値です。
- ブロック書き込み:82137 kB/Sec
- ブロックリライト:80513 kB/Sec
- ブロック読み込み:1961634 kB/Sec
- ランダムシーク :16166 /Sec
RAID0 平均値を一覧表示する
Micro(t1.micro) | ブロック書き込み(KB/Sec) | ブロックリライト(KB/Sec) | ブロック読み込み(KB/Sec) | ランダムシーク(/Sec) | 単価($/h) Linux, Tokyo |
---|---|---|---|---|---|
1台 | 28395 | 21940 | 138660 | 7528 | 0.027 |
RAID0 2台 | 34970 | 27271 | 162178 | 4549 | - |
RAID0 4台 | 36763 | 26447 | 173878 | 4507 | - |
Large(m1.large) | ブロック書き込み(KB/Sec) | ブロックリライト(KB/Sec) | ブロック読み込み(KB/Sec) | ランダムシーク(/Sec) | 単価($/h) Linux, Tokyo |
---|---|---|---|---|---|
1台 | 40685 | 47039 | 1141063 | 9474 | 0.40 |
RAID0 2台 | 78498 | 75381 | 1123610 | 10670 | - |
RAID0 4台 | 86972 | 80442 | 1135758 | 11368 | - |
Extra Large (m1.xlarge) | ブロック書き込み(KB/Sec) | ブロックリライト(KB/Sec) | ブロック読み込み(KB/Sec) | ランダムシーク(/Sec) | 単価($/h) Linux, Tokyo |
---|---|---|---|---|---|
1台 | 34706 | 42305 | 1625674 | 7723 | 0.80 |
RAID0 2台 | 81722 | 86559 | 1573818 | 12684 | - |
RAID0 4台 | 113565 | 107232 | 1551414 | 14466 | - |
High-Memory Double Extra Large (m2.2xlarge) | ブロック書き込み(KB/Sec) | ブロックリライト(KB/Sec) | ブロック読み込み(KB/Sec) | ランダムシーク(/Sec) | 単価($/h) Linux, Tokyo |
---|---|---|---|---|---|
1台 | 42641 | 50221 | 2066364 | 13876 | 1.20 |
RAID0 2台 | 70917 | 71262 | 1961041 | 13252 | - |
RAID0 4台 | 82137 | 80513 | 1961634 | 16166 | - |
まとめ
えー、今回も人柱的な実験を行いました。Largeインスタンス以上であれば、1台よりも2台の方がディスクI/O性能が目に見えて上がりました。Microインスタンスは多少改善程度です。また、2台と4台の違いは小さかったです。おそらくですが、ディスクの性能よりも、EC2内でインスタンス毎に割り当てられているネットワークの性能が影響しているのではと思いました。次回は、最後の楽園、EphemeralディスクのRAID0を行ってみたいと思います。